Lambda(Go)でLambdaパッケージを書き忘れて無限ループした話
こんにちは、ゲームソリューション部のsoraです。
今回は、Lambda(Go)でLambdaパッケージを書き忘れて無限ループした話について書いていきます。
Lambdaでの無限ループ
以下のLambda(Go)にてテストを実行したところ、実行ログにエラーが表示されました。
package main import( "database/sql" "github.com/go-sql-driver/mysql" "fmt" "crypto/tls" ) func main() { // TiDBへの接続 mysql.RegisterTLSConfig("tidb", &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "[TiDB Cloudで表示された接続コード]", }) db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]") if err != nil { fmt.Println("DB connection error") } defer db.Close() // SQL実行 rows, err := db.Query("SELECT * from PrefecturesTable") if err != nil { fmt.Println("SQL error") } defer rows.Close() fmt.Println("都道府県名, 県庁所在地, 地域") for rows.Next() { var prefecturename, prefecturalcapital, region string err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion) if err != nil { fmt.Println("Scan error") return } fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region) } }
{ "errorType": "Runtime.ExitError", "errorMessage": "RequestId: f7f6ec4d-d82a-4756-9eb7-d009cfb405e1 Error: Runtime exited with error: exit status 1" } "都道府県名, 県庁所在地, 地域" ・・・ 2023/06/29 07:36:05 <nil> "都道府県名, 県庁所在地, 地域" ・・・ 2023/06/29 07:36:06 <nil> "都道府県名, 県庁所在地, 地域" ・・・
原因→解消
原因が何かを考えていて、rows.Next()で無限ループしているのかと思ったものの、そうであればfmt.Println("都道府県名, 県庁所在地, 地域")
が何度も実行されているのはおかしいし、実行ログに日付と時間が出ているのもおかしいと思っていました。
原因としては、github.com/aws/aws-lambda-go/lambda
パッケージを利用しておらず、lambda.Start()
を使用せずにmainにそのままコードを書いていることが問題です。
公式ページに記載の通り、github.com/aws/aws-lambda-go/lambda
パッケージを含める必要があります。
以下が修正版のコードです。
package main import( "database/sql" "github.com/go-sql-driver/mysql" "github.com/aws/aws-lambda-go/lambda" "fmt" "crypto/tls" ) func TiDBOperation() () { // TiDBへの接続 mysql.RegisterTLSConfig("tidb", &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "[TiDB Cloudで表示された接続コード]", }) db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]") if err != nil { fmt.Println("DB connection error") } defer db.Close() // SQL実行 rows, err := db.Query("SELECT * from PrefecturesTable") if err != nil { fmt.Println("SQL error") } defer rows.Close() fmt.Println("都道府県名, 県庁所在地, 地域") for rows.Next() { var prefecturename, prefecturalcapital, region string err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion) if err != nil { fmt.Println("Scan error") return } fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region) } } func main() { lambda.Start(TiDBOperation) }
最後に
今回は、Lambda(Go)でLambdaパッケージを書き忘れて無限ループした話を記事にしました。
どなたかの参考になると幸いです。